/*
* Copyright (C) 2010-2012 Magnus Skjegstad
* 
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
* 
* The latest version of this library can be downloaded from http://mist-pubsub.googlecode.com
* 
*/
package com.skjegstad.mist2.events.listeners;

import com.skjegstad.simpleevents.SimpleEvent;
import com.skjegstad.simpleevents.SimpleEventListener;
import com.skjegstad.mist2.datatypes.NodeIdentifier;
import com.skjegstad.mist2.events.ExceptionEvent;
import java.io.OutputStream;
import java.io.PrintStream;

/**
 *
 * @author Magnus Skjegstad
 */
public class OutputStreamExceptionEventListener implements SimpleEventListener {
    PrintStream output;
    NodeIdentifier nodeId;

    public OutputStreamExceptionEventListener(OutputStream output, NodeIdentifier nodeId) {
        this(new PrintStream(output), nodeId);
    }

    public OutputStreamExceptionEventListener(PrintStream output, NodeIdentifier nodeId) {
        this.output = output;
        this.nodeId = nodeId;
    }

    public OutputStreamExceptionEventListener(NodeIdentifier nodeId) {
        this(System.err, nodeId);
    }

    public void receiveEvent(SimpleEvent event) {
        if (event instanceof ExceptionEvent) {
            ExceptionEvent e = (ExceptionEvent) event;
            output.print("(E) " + nodeId + "," + e.getTimestamp() + ": ");
            e.getException().printStackTrace(output);
        }
    }

}
